home *** CD-ROM | disk | FTP | other *** search
- /* DPMI.H
- *
- * DPMI functions for protected mode MIDAS
- *
- * $Id: dpmi.h,v 1.2 1997/01/16 18:41:59 pekangas Exp $
- *
- * Copyright 1996,1997 Housemarque Inc.
- *
- * This file is part of the MIDAS Sound System, and may only be
- * used, modified and distributed under the terms of the MIDAS
- * Sound System license, LICENSE.TXT. By continuing to use,
- * modify or distribute this file you indicate that you have
- * read the license and understand and accept it fully.
- */
-
-
- #ifndef __DPMI_H
- #define __DPMI_H
-
-
- /* new errors:
- errDPMIFailure DPMI failure
- errInvalidDescriptor invalid segment descriptor
- */
-
-
-
- /****************************************************************************\
- * struct dpmiRealCallRegs
- * -----------------------
- * Description: Real mode calling register value structure
- \****************************************************************************/
-
- typedef struct
- {
- ulong rEDI;
- ulong rESI;
- ulong rEBP;
- ulong reserved;
- ulong rEBX;
- ulong rEDX;
- ulong rECX;
- ulong rEAX;
- ushort flags;
- ushort rES;
- ushort rDS;
- ushort rFS;
- ushort rGS;
- ushort rIP;
- ushort rCS;
- ushort rSP; /* if SS and SP are zero, DPMI will */
- ushort rSS; /* provide a small (30 words) stack */
- } dpmiRealCallRegs;
-
-
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
-
-
- /****************************************************************************\
- *
- * Function: int dpmiAllocDescriptor(unsigned *descriptor);
- *
- * Description: Allocate LDT descriptor. Use dpmiFreeDescriptor to deallocate.
- *
- * Input: unsigned *descriptor pointer to descriptor number
- *
- * Returns: MIDAS error code. Descriptor number is written to *descriptor.
- *
- \****************************************************************************/
-
- int CALLING dpmiAllocDescriptor(unsigned *descriptor);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dpmiFreeDescriptor(unsigned descriptor);
- *
- * Description: Deallocates an LDT descriptor.
- *
- * Input: unsigned descriptor descriptor to deallocate
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING dpmiFreeDescriptor(unsigned descriptor);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dpmiSetSegmentBase(unsigned selector, ulong baseAddr);
- *
- * Description: Changes the 32-bit linear base address of a selector.
- *
- * Input: unsigned selector selector number
- * ulong baseAddr 32-bit linear base address for
- * selector
- *
- * Returns: MIDAS error code.
- *
- \****************************************************************************/
-
- int CALLING dpmiSetSegmentBase(unsigned selector, ulong baseAddr);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dpmiGetSegmentBase(unsigned selector, ulong *baseAddr);
- *
- * Description: Reads the 32-bit linear base address of a selector.
- *
- * Input: unsigned selector selector number
- * ulong *baseAddr pointer to the 32-bit linear base
- * address of the selector
- *
- * Returns: MIDAS error code. Selector base address is written to
- * *baseAddr.
- *
- \****************************************************************************/
-
- int CALLING dpmiGetSegmentBase(unsigned selector, ulong *baseAddr);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dpmiSetSegmentLimit(unsigned selector, ulong limit);
- *
- * Description: Changes the limit of a segment selector.
- *
- * Input: unsigned selector selector number
- * ulong limit 32-bit segment limit
- *
- * Returns: MIDAS error code.
- *
- \****************************************************************************/
-
- int CALLING dpmiSetSegmentLimit(unsigned selector, ulong limit);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dpmiSetSegmentAccessRights(unsigned selector,
- * unsigned accessRights);
- *
- * Description: Changes the access rights of a selector
- *
- * Input: unsigned selector selector
- * unsigned accessRights new access rights for the segment
- *
- * Returns: MIDAS error code.
- *
- \****************************************************************************/
-
- int CALLING dpmiSetSegmentAccessRights(unsigned selector,
- unsigned accessRights);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dpmiCreateCodeAlias(unsigned codeSelector,
- * unsigned *selector);
- *
- * Description: Creates a data descriptor that has the same base and limit
- * as a code segment descriptor. Use dpmiFreeDescriptor() to
- * deallocate data descriptor.
- *
- * Input: unsigned codeSelector code segment selector
- * unsigned *selector pointer to data segment selector
- *
- * Returns: MIDAS error code. New data selector is written to *selector.
- *
- \****************************************************************************/
-
- int CALLING dpmiCreateCodeAlias(unsigned codeSelector, unsigned *selector);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dpmiAllocDOSMem(unsigned numParagraphs, unsigned *segment,
- * unsigned *selector);
- *
- * Description: Allocates memory from DOS free memory pool, below 1MB. Use
- * dpmiFreeDOSMem() to deallocate.
- *
- * Input: unsigned numParagraphs number of paragraphs to allocate
- * unsigned *segment pointer to real mode segment
- * unsigned *selector pointer to selector
- *
- * Returns: MIDAS error code. Real mode segment of allocated block is
- * written to *segment. Protected mode selector for block is
- * written to *selector.
- *
- \****************************************************************************/
-
- int CALLING dpmiAllocDOSMem(unsigned numParagraphs, unsigned *segment,
- unsigned *selector);
-
-
-
-
- /****************************************************************************\
- *
- * Function: dpmiFreeDOSMem(unsigned selector);
- *
- * Description: Deallocates memory allocated with dpmiAllocDOSMem().
- *
- * Input: unsigned selector selector for allocated block
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING dpmiFreeDOSMem(unsigned selector);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dpmiRealModeInt(unsigned intNum,
- * dpmiRealCallRegs *registers);
- *
- * Description: Simulates a real mode interrupt using DPMI service 0x0300.
- * *register MUST contain appropriate register values for
- * interrupt (CS:IP is ignored).
- *
- * Input: unsigned intNum interrupt number
- * dpmiRealCallRegs *registers DPMI real mode calling struct
- *
- * Returns: MIDAS error code. Register values returned by the interrupt
- * are written to *registers.
- *
- \****************************************************************************/
-
- int CALLING dpmiRealModeInt(unsigned intNum, dpmiRealCallRegs *registers);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dpmiLockMemory(ulong start, ulong numBytes);
- *
- * Description: Locks a region of memory to prevent it from being paged. The
- * memory can be unlocked using dpmiUnlockMemory().
- *
- * Input: ulong start memory region start address
- * ulong numBytes memory region length in bytes
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING dpmiLockMemory(ulong start, ulong numBytes);
-
-
-
-
- /****************************************************************************\
- *
- * Function: int dpmiUnlockMemory(ulong start, ulong numBytes);
- *
- * Description: Unlocks a region of memory locked with dmpiLockMemory().
- *
- * Input: ulong start memory region start address
- * ulong numBytes memory region length in bytes
- *
- * Returns: MIDAS error code
- *
- \****************************************************************************/
-
- int CALLING dpmiUnlockMemory(ulong start, ulong numBytes);
-
-
-
- #ifdef __cplusplus
- }
- #endif
-
-
-
- #endif
-
- /*
- * $Log: dpmi.h,v $
- * Revision 1.2 1997/01/16 18:41:59 pekangas
- * Changed copyright messages to Housemarque
- *
- * Revision 1.1 1996/05/22 20:49:33 pekangas
- * Initial revision
- *
- */